////////////////////////////////////////////////////////////////////////////////
//
// CTTS_SimpleInFile CLASS Header file.
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __CTTS_SIMPLE_IN_FILE_H__
#define __CTTS_SIMPLE_IN_FILE_H__

#include <stdio.h>
#include <string>
#include <assert.h>

using std::string;

class CTTS_SimpleInFile
{
private:
	string m_Filename;
	FILE *m_FileHandle;

public:
	CTTS_SimpleInFile () 
		{
		m_FileHandle = NULL;
		};

	CTTS_SimpleInFile (const char *Filename)
		{
		assert (Filename != NULL);

		m_Filename = Filename;
		m_FileHandle = NULL;
		}

	~CTTS_SimpleInFile ()
		{
		if (m_FileHandle != NULL)
			Close ();
		}

	int Open ();
	inline int Open (const char *Filename);
	inline void Close ();
	inline int eof ();

	////////////////////////////////////////////////////////////////////////////////
	// operator>>
	//
	////////////////////////////////////////////////////////////////////////////////
	inline int operator>> (int &Val)
		{
		int temp = 0;
		int checkread = fscanf (m_FileHandle, "%d", &temp);
		Val = (int) temp;

		return checkread;
		};

	////////////////////////////////////////////////////////////////////////////////
	// operator>>
	//
	////////////////////////////////////////////////////////////////////////////////
	inline int operator>> (string &Str)
		{
		char *temp[200];
		int checkread = fscanf (m_FileHandle, "%s", temp);
		char *TempString = strdup ((const char *)temp);

		assert (TempString != NULL);

		Str = TempString;
		delete TempString;
		return checkread;
		};

	////////////////////////////////////////////////////////////////////////////////
	// operator>>
	//
	////////////////////////////////////////////////////////////////////////////////
	inline int operator>> (double &Val)
		{
		double temp = 0;
		int checkread = fscanf (m_FileHandle, "%lf", &temp);
		Val = (double) temp;

		return checkread;
		};

	char * GetLine (int MaxLength, char Delimiter = '\n');
};

///////////////////////////////////////////////////////////////
// INLINE functions
// 
///////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Open
//
////////////////////////////////////////////////////////////////////////////////
inline int CTTS_SimpleInFile::Open (const char *Filename)
{
	m_Filename = Filename;
	return (Open ());
}

////////////////////////////////////////////////////////////////////////////////
// Close
//
////////////////////////////////////////////////////////////////////////////////
inline void CTTS_SimpleInFile::Close ()
{
	if (m_FileHandle != NULL)
		{
		fclose (m_FileHandle);
		m_FileHandle = NULL;
		}
}

////////////////////////////////////////////////////////////////////////////////
// eof
//
////////////////////////////////////////////////////////////////////////////////
inline int CTTS_SimpleInFile::eof ()
{
	return (feof (m_FileHandle));
}

#endif